/*********************************************************************************
  *Copyright (c)    2021   xldeng
  *FileName:        213.cpp.c
  *Author:          xldeng
  *Version:         1.0
  *Date:            2021/2/9 17:26
  *Description:     
  *Others:          
  *Function List:   
     1.…………
  *History:  
     1.Date:
       Author:
       Modification:
**********************************************************************************/
//你是一个专业的小偷，计划偷窃沿街的房屋，每间房内都藏有一定的现金。
// 这个地方所有的房屋都 围成一圈 ，这意味着第一个房屋和最后一个房屋是紧挨着的。
// 同时，相邻的房屋装有相互连通的防盗系统，如果两间相邻的房屋在同一晚上被小偷闯入，系统会自动报警 。
//
//给定一个代表每个房屋存放金额的非负整数数组，计算你 在不触动警报装置的情况下 ，能够偷窃到的最高金额。
#include "../header.h"
class Solution {
public:
    int rob(vector<int>& nums) {
        int n = nums.size();
        if (n == 0) return 0;
        if (n == 1) return nums[0];
        int ans1 = rob(nums,0,n-1);
        int ans2 = rob(nums,1,n);
        return max(ans1,ans2);
    }

    int rob(vector<int> &nums,int start,int end) { // [start,end)
        int n = end - start;
        int dp_i_0 = 0;
        int dp_i_1 = INT_MIN;
        for (int i = start; i < end; ++i) {
            int temp = dp_i_0;
            dp_i_0 = max(dp_i_0, dp_i_1);
            dp_i_1 = temp + nums[i];
        }
        return max(dp_i_0,dp_i_1);
    }
};